package com.nineclock.system.service.impl;

import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.nineclock.common.constant.NcConstant;
import com.nineclock.common.enums.ResponseEnum;
import com.nineclock.common.exception.NCException;
import com.nineclock.common.utils.BeanHelper;
import com.nineclock.dto.SysCompanyContactConfigDTO;
import com.nineclock.pojo.SysCompanyContactConfig;
import com.nineclock.system.mapper.SysCompanyContactConfigMapper;
import com.nineclock.system.service.SysCompanyContactConfigService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

@Service
@Slf4j
@Transactional
public class SysCompanyContactConfigServiceImpl implements SysCompanyContactConfigService {
    @Autowired
    SysCompanyContactConfigMapper contactConfigMapper;

    // 添加企业字段
    @Override
    public void addCompanyContactConfig(SysCompanyContactConfigDTO sysCompanyContactConfigDTO) {
        if (ObjectUtil.isNull(sysCompanyContactConfigDTO) || sysCompanyContactConfigDTO.getName() == null) {
            throw new NCException(ResponseEnum.MESSAGE_PARAMS_LOST);
        }
        Long id = 1L;
        SysCompanyContactConfig contactConfig = BeanHelper.copyProperties(sysCompanyContactConfigDTO, SysCompanyContactConfig.class);
        //SysCompanyContactConfig contactConfig = new SysCompanyContactConfig();
        // TODO 目前先将该企业ID设置为1 , 后续完善
        contactConfig.setCompanyId(id);
        contactConfig.setStatus((short) 1);
        contactConfig.setFieldType("string");
        //contactConfig.setName(sysCompanyContactConfigDTO.getName());
        //contactConfig.setType(sysCompanyContactConfigDTO.getType());
        contactConfigMapper.insert(contactConfig);
    }

    /**
     * 查询并初始化企业通讯录
     *
     * @return
     */
    @Override
    public List<SysCompanyContactConfigDTO> findCompanyContactConfig() {
        Long id = 1L; //获取企业ID -- 从登陆用户信息中, 获取当前企业的ID
        List<SysCompanyContactConfigDTO> list = new ArrayList<>();
        // 构造查询条件
        LambdaQueryWrapper<SysCompanyContactConfig> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(SysCompanyContactConfig::getCompanyId, id);
        // 根据条件查询
        List<SysCompanyContactConfig> sysCompanyContactConfigs = contactConfigMapper.selectList(queryWrapper);
        // 说明为空,初始化默认数据
        if (CollectionUtil.isEmpty(sysCompanyContactConfigs)) {
            for (String fieldName : NcConstant.COMPANY_CONFIG_CONTACT_LIST) {
                SysCompanyContactConfig contactConfig = new SysCompanyContactConfig();
                contactConfig.setCompanyId(id);
                contactConfig.setType("fixed");
                contactConfig.setName(fieldName);
                contactConfig.setFieldType("string");
                contactConfigMapper.insert(contactConfig);
                list.add(BeanHelper.copyProperties(contactConfig, SysCompanyContactConfigDTO.class));
            }
            return list;
        }
        return BeanHelper.copyWithCollection(sysCompanyContactConfigs, SysCompanyContactConfigDTO.class);
    }

    /**
     * 修改企业通讯录状态
     */
    @Override
    public void updateCompanyContactConfigStatus(Long id, short status) {
        SysCompanyContactConfig contactConfig = contactConfigMapper.selectById(id);
        if (ObjectUtil.isNull(contactConfig)) {
            throw new NCException(ResponseEnum.DATA_NOT_EXISTS);
        }
        contactConfig.setId(id);
        contactConfig.setStatus(status);
        contactConfigMapper.updateById(contactConfig);
        log.info("已提交修改");
    }

    /**
     * 删除通讯录
     *
     * @param id
     */
    @Override
    public void deleteCompanyContactConfigById(Long id) {
        SysCompanyContactConfig contactConfig = contactConfigMapper.selectById(id);
        if (ObjectUtil.isNull(contactConfig) || "fixed".equals(contactConfig.getType())) {
            throw new NCException(ResponseEnum.DELETE_OPERATION_FAIL);
        }
        contactConfigMapper.deleteById(id);
    }
}
